データ分析は、ビジネスの意思決定からAI開発まで幅広い領域で活用されています。Pythonはその中心的な言語であり、豊富なライブラリにより、初心者でも簡単にデータ分析を始められます。
💡 この記事のポイント
pandas + NumPy + Matplotlib の3つのライブラリだけで、データの読み込み、加工、可視化まで一通りの分析が可能です。
1. なぜPythonでデータ分析か
- 豊富なライブラリ:pandas、NumPy、scikit-learn、TensorFlowなど
- コミュニティ:Stack Overflowでの質問数No.1
- 可読性:コードが読みやすく、学習コストが低い
- Jupyter Notebook:インタラクティブな分析環境
2. 環境構築
# Pythonのインストール(推奨: 3.11以上)
# Anaconda推奨だが、pipでも可
# 仮想環境の作成
python -m venv data-env
source data-env/bin/activate # macOS/Linux
# data-env\Scripts\activate # Windows
# 必要なライブラリのインストール
pip install pandas numpy matplotlib seaborn jupyter
# Jupyter Notebookの起動
jupyter notebook
3. pandasの基本操作
pandasは表形式データの操作に特化したライブラリです。
import pandas as pd
# CSVの読み込み
df = pd.read_csv('sales_data.csv')
# データの概要確認
print(df.shape) # (行数, 列数)
print(df.info()) # データ型の確認
print(df.describe()) # 統計量の要約
print(df.head(10)) # 先頭10行
# 列の選択
revenue = df['revenue']
subset = df[['product', 'revenue', 'quantity']]
# フィルタリング
high_revenue = df[df['revenue'] > 100000]
tokyo_data = df[df['region'] == '東京']
# グループ化と集計
monthly_sales = df.groupby('month')['revenue'].agg(['sum', 'mean', 'count'])
# 新しい列の追加
df['profit_rate'] = (df['revenue'] - df['cost']) / df['revenue'] * 100
# 欠損値の処理
df['price'].fillna(df['price'].median(), inplace=True)
df.dropna(subset=['product_name'], inplace=True)
# ソート
df_sorted = df.sort_values('revenue', ascending=False)
広告
4. NumPyで数値計算
import numpy as np
# 配列の作成
arr = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 統計計算
print(f"平均: {np.mean(arr)}") # 3.0
print(f"標準偏差: {np.std(arr)}") # 1.414
print(f"中央値: {np.median(arr)}") # 3.0
print(f"最大値: {np.max(arr)}") # 5
# ベクトル演算(ループ不要で高速)
prices = np.array([100, 200, 300, 400, 500])
tax_included = prices * 1.10 # 全要素に一括演算
# 乱数生成
rng = np.random.default_rng(42)
random_data = rng.normal(loc=50, scale=10, size=1000) # 正規分布
5. Matplotlibで可視化
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['font.family'] = 'Noto Sans JP'
# 折れ線グラフ
months = ['1月', '2月', '3月', '4月', '5月', '6月']
revenue = [120, 150, 180, 160, 200, 220]
fig, ax = plt.subplots(figsize=(10, 6))
ax.plot(months, revenue, marker='o', linewidth=2, color='#4f46e5')
ax.set_title('月別売上推移', fontsize=16, fontweight='bold')
ax.set_xlabel('月')
ax.set_ylabel('売上(万円)')
ax.grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('revenue_chart.png', dpi=150)
plt.show()
# 棒グラフ + 円グラフを並列表示
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(14, 6))
categories = ['Web開発', 'AI', 'クラウド', 'モバイル']
values = [45, 30, 15, 10]
ax1.bar(categories, values, color=['#4f46e5', '#06b6d4', '#22c55e', '#f59e0b'])
ax1.set_title('カテゴリ別記事数')
ax2.pie(values, labels=categories, autopct='%1.1f%%', startangle=90)
ax2.set_title('カテゴリ構成比')
plt.tight_layout()
plt.show()
6. 実践プロジェクト:Webサイトアクセスログ分析
# 実践例:アクセスログの分析
import pandas as pd
import matplotlib.pyplot as plt
# データ読み込み
df = pd.read_csv('access_log.csv', parse_dates=['timestamp'])
# 日別のPV数を集計
daily_pv = df.groupby(df['timestamp'].dt.date).size()
# 曜日別のアクセス傾向
df['weekday'] = df['timestamp'].dt.day_name()
weekday_avg = df.groupby('weekday').size().reindex(
['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
)
# 人気ページTop10
popular_pages = df['page'].value_counts().head(10)
# レポート出力
print("=== アクセスログ分析レポート ===")
print(f"分析期間: {df['timestamp'].min()} 〜 {df['timestamp'].max()}")
print(f"総PV数: {len(df):,}")
print(f"ユニークユーザー数: {df['user_id'].nunique():,}")
print(f"平均日次PV: {daily_pv.mean():.0f}")
print(f"\n人気ページTop5:")
for page, count in popular_pages.head(5).items():
print(f" {page}: {count:,} PV")
✅ 次のステップ
基本を学んだら、scikit-learnで機械学習、Seabornで高度な可視化、Streamlitでダッシュボード作成に挑戦してみましょう。
Pythonでのデータ分析は、エンジニアのスキルセットを大きく広げる技術です。ぜひ自分のプロジェクトのデータを使って実践的に学んでみてください。